import { NextRequest, NextResponse } from 'next/server';

// 公司内部IP白名单（示例）
const COMPANY_IPS = [
  '192.168.1.0/24',  // 公司内网
  '10.0.0.0/8',      // 公司VPN
  '172.16.0.0/12',   // 公司办公网络
  '127.0.0.1',       // 本地开发
  '::1'              // IPv6 本地
];

// 检查IP是否在白名单中
function isIPInWhitelist(clientIP: string): boolean {
  // 简单的IP检查，实际项目中可以使用更复杂的CIDR匹配
  return COMPANY_IPS.some(whitelistIP => {
    if (whitelistIP.includes('/')) {
      // CIDR 格式，这里简化处理
      const baseIP = whitelistIP.split('/')[0];
      return clientIP.startsWith(baseIP);
    }
    return clientIP === whitelistIP;
  });
}

// 模拟用户信息（实际项目中应该从数据库或认证服务获取）
function getUserInfo(clientIP: string) {
  // 根据IP或其他信息获取用户信息
  const userMap: Record<string, any> = {
    '127.0.0.1': {
      name: '开发人员',
      department: '技术部',
      role: 'developer'
    },
    '192.168.1.100': {
      name: '管理员',
      department: '运维部',
      role: 'admin'
    },
    '10.0.0.50': {
      name: '产品经理',
      department: '产品部',
      role: 'pm'
    }
  };

  return userMap[clientIP] || {
    name: '内部用户',
    department: '未知部门',
    role: 'user'
  };
}

export async function POST(request: NextRequest) {
  try {
    // 获取客户端IP
    const clientIP = request.ip || 
                    request.headers.get('x-forwarded-for')?.split(',')[0] || 
                    request.headers.get('x-real-ip') || 
                    '127.0.0.1';

    console.log(`🔐 访问验证请求 - IP: ${clientIP}`);

    // 检查IP白名单
    const isWhitelisted = isIPInWhitelist(clientIP);
    
    if (!isWhitelisted) {
      console.log(`❌ 访问被拒绝 - IP: ${clientIP} 不在白名单中`);
      return NextResponse.json({
        authorized: false,
        message: '您的IP地址不在公司内部网络白名单中',
        clientIP,
        timestamp: new Date().toISOString()
      }, { status: 403 });
    }

    // 获取用户信息
    const userInfo = getUserInfo(clientIP);
    userInfo.ip = clientIP;

    // 记录访问日志
    console.log(`✅ 访问授权成功 - IP: ${clientIP}, 用户: ${userInfo.name}`);

    return NextResponse.json({
      authorized: true,
      message: '访问授权成功',
      userInfo,
      timestamp: new Date().toISOString()
    });

  } catch (error) {
    console.error('访问验证失败:', error);
    return NextResponse.json({
      authorized: false,
      message: '访问验证过程中发生错误',
      error: error instanceof Error ? error.message : '未知错误',
      timestamp: new Date().toISOString()
    }, { status: 500 });
  }
}

// 也支持GET请求用于简单测试
export async function GET(request: NextRequest) {
  const clientIP = request.ip || 
                  request.headers.get('x-forwarded-for')?.split(',')[0] || 
                  request.headers.get('x-real-ip') || 
                  '127.0.0.1';

  const isWhitelisted = isIPInWhitelist(clientIP);
  const userInfo = getUserInfo(clientIP);
  userInfo.ip = clientIP;

  return NextResponse.json({
    authorized: isWhitelisted,
    message: isWhitelisted ? '访问授权成功' : 'IP地址不在白名单中',
    userInfo,
    clientIP,
    timestamp: new Date().toISOString()
  });
}
